//
// WhitespaceFilter.h
//
// Library: XML
// Package: SAX
// Module:  WhitespaceFilter
//
// Definition of the WhitespaceFilter class.
//
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//


#ifndef SAX_WhitespaceFilter_INCLUDED
#define SAX_WhitespaceFilter_INCLUDED


#include "Poco/SAX/LexicalHandler.h"
#include "Poco/SAX/XMLFilterImpl.h"
#include "Poco/XML/XML.h"


namespace Poco
{
namespace XML
{


    class XML_API WhitespaceFilter : public XMLFilterImpl, public LexicalHandler
    /// This implementation of the SAX2 XMLFilter interface
    /// filters all whitespace-only character data element
    /// content.
    {
    public:
        WhitespaceFilter();
        /// Creates the WhitespaceFilter, with no parent.

        WhitespaceFilter(XMLReader * pReader);
        /// Creates the WhitespaceFilter with the specified parent.

        ~WhitespaceFilter();
        /// Destroys the WhitespaceFilter.

        // XMLReader
        void setProperty(const XMLString & propertyId, const XMLString & value);
        void setProperty(const XMLString & propertyId, void * value);
        void * getProperty(const XMLString & propertyId) const;

        // ContentHandler
        void startDocument();
        void endDocument();
        void startElement(const XMLString & uri, const XMLString & localName, const XMLString & qname, const Attributes & attrList);
        void endElement(const XMLString & uri, const XMLString & localName, const XMLString & qname);
        void characters(const XMLChar ch[], int start, int length);
        void ignorableWhitespace(const XMLChar ch[], int start, int length);
        void processingInstruction(const XMLString & target, const XMLString & data);

        // LexicalHandler
        void startDTD(const XMLString & name, const XMLString & publicId, const XMLString & systemId);
        void endDTD();
        void startEntity(const XMLString & name);
        void endEntity(const XMLString & name);
        void startCDATA();
        void endCDATA();
        void comment(const XMLChar ch[], int start, int length);

    protected:
        void setupParse();

    private:
        LexicalHandler * _pLexicalHandler;
        XMLString _data;
        bool _filter;
    };


}
} // namespace Poco::XML


#endif // SAX_WhitespaceFilter_INCLUDED
